package com.huawei.hwclouds.lubanops.demo.common.client;

import java.util.Map;

/**
 * 实现 Http Client 请求发送接口
 *
 * @author y00438022
 * @since 2020/11/8
 **/
public interface HttpClient {

    /**
     * 实现http的get请求的发送，如果网络错误等异常会抛出异常， <br>
     *
     * @param url
     * @param params
     * @param headers
     * @param timeout
     * @return
     * @author y00438022
     * @since 2020年3月2日
     */
    public HttpCallResult sendGet(String url, Map<String, ? extends Object> params, Map<String, String> headers,
        int timeout, String proxyHost, int proxyPort);

    public HttpCallResult sendGet(String url, Map<String, ? extends Object> params, Map<String, String> headers,
        int timeout);

    public HttpCallResult sendGet(String url, Map<String, ? extends Object> params);

    public HttpCallResult sendGet(String url, Map<String, ? extends Object> params, Map<String, String> headers);

    /**
     * 实现http的delete请求的发送，如果网络错误等异常会抛出异常， <br>
     *
     * @param url
     * @param headers
     * @param timeout
     * @return
     * @author w30002210
     * @since 2020年12月2日
     */
    public HttpCallResult sendDelete(String url, Map<String, String> headers, int timeout, String proxyHost,
        int proxyPort);

    public HttpCallResult sendDelete(String url, Map<String, String> headers, int timeout);

    public HttpCallResult sendDelete(String url, Map<String, String> headers);

    public HttpCallResult sendDelete(String url);

    /**
     * post方法 实现http的调用，内容放在body体里面
     *
     * @param url     发送的地址
     * @param content 发送的内容，json格式
     * @param timeout 超时时间
     * @return http调用结果
     */
    public HttpCallResult sendPostJSON(String url, Map<String, String> headers, String content, int timeout,
        String proxyHost, int proxyPort);

    public HttpCallResult sendPostJSON(String url, Map<String, String> headers, String content, int timeout);

    public HttpCallResult sendPostJSON(String url, Map<String, String> headers, String content);

    /**
     * put方法 实现http的调用，内容放在body体里面
     *
     * @param url     发送的地址
     * @param content 发送的内容，json格式
     * @param timeout 超时时间
     * @return http调用结果
     */
    public HttpCallResult sendPutJSON(String url, Map<String, String> headers, String content, int timeout,
        String proxyHost, int proxyPort);

    public HttpCallResult sendPutJSON(String url, Map<String, String> headers, String content, int timeout);

    public HttpCallResult sendPutJSON(String url, Map<String, String> headers, String content);
}
